<?Php
    
    // скрипт установки фреймворка minima v0.200
    
    header("Content-Type: text/html; charset=utf-8");
    $canNotInstall = false;
    
    error_reporting(E_ERROR);
    ini_set('display_errors',1);
    
    if (file_exists('modules'.DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR.'install.ed')){
        echo 'Установка уже произведена! Запустить скрипт установки можно только для неинсталлированного фреймворка!';
        die();
    }
    
    
if (!$_REQUEST['step']){
        
        $exts = get_loaded_extensions();
    
    ?>
        
        <h2>Скрипт установки фреймворка minima</h2>
        <h4>Шаг №1 - проверка рабочего окружения</h4>
        <BR><BR>
        
        
    <?Php
    
        $ver = phpversion();
        echo 'Версия php: <b>' . $ver . '</b>';
            if (floatval($ver) >= 6)echo ' - <font color="blue">на совместимость с фреймворком не тестировалась</font>. Желательна версия &gt;5.x';
        elseif (floatval($ver) >= 5.3)echo ' - <font color="green">оптимальная</font>.';
        elseif (floatval($ver) >= 5.1)echo ' - <font color="blue">неоптимальная, возможно снижение производительности</font>. Желательна версия &gt;5.3';
        else echo ' - <font color="red">на совместимость с фреймворком не тестировалась</font>. Советуем обновить её до версии &gt;5.3';
    
    ?>
    
        
        
        <BR><BR>
        Список обязательных модулей: <BR>
        
        <table border=1>
            <tr><td align=center width=120><b>модуль</b></td><td align=center width=120><b>статус</b></td></tr>
    <?Php
    
            $needMod = array('mbstring',  'iconv', 'pdo_mysql', 'PDO', 'mysql', 'SPL', 'ldap', 'soap', 'curl', 'json');
            
            foreach ($needMod as $m){
                if (in_array($m, $exts))$stat = '<font color="green">ok</font>';
                    else {
                        $stat = '<font color="red">не установлен</font>';
                        $canNotInstall = true;
                    }
                    
                echo "<tr><td><b>{$m}</b></td><td align=center>{$stat}</td></tr>";
            }

    ?>
        </table>
        
        
        <BR><BR>
        Список желательных (но не обязательных) модулей: <BR>
        
        <table border=1>
            <tr><td align=center width=120><b>модуль</b></td><td align=center width=120><b>статус</b></td></tr>
    <?Php
    
            $wantMod = array('date', 'pcre', 'session', 'sockets', 'fileinfo', 'imap', 'Phar', 'pgsql');
            
            foreach ($wantMod as $m){
                if (in_array($m, $exts))$stat = '<font color="green">ok</font>';
                    else $stat = '<font color="red">не установлен</font>';
                    
                echo "<tr><td><b>{$m}</b></td><td align=center>{$stat}</td></tr>";
            }
            
    ?>
        </table>
        
        <BR>
        
        * все недостающие модули можно установить
        <a href="http://code.google.com/p/minima/wiki/00SystemRequirements" target="_blank">по этой инструкции</a>.
        
        <BR><BR>
        
        <BR>
        
        Список требуемых параметров в файле <b>php.ini</b>:
        
        <BR>
        
        <table border=1>
            <tr><td align=center width=120><b>параметр</b></td><td align=center width=120><b>значение</b></td></tr>
    <?Php
    
            $needInis = array('short_open_tag'=>1, 'file_uploads'=>1, 'max_execution_time'=>60);
            foreach ($needInis as $k => $m){
                $v = ini_get($k); if (!$v)$v = 0;
                if ($v == $m)$stat = '<font color="green">"'.$v.'" - ok</font>';
                    else {
                        $stat = '<font color="red">"'.$v.'", а нужно "'.$m.'"!</font>';
                        $canNotInstall = true;
                    }
                    
                echo "<tr><td><b>{$k}</b></td><td align=center>{$stat}</td></tr>";
            }
    
    ?>
        </table>
        
        <BR>
            
        * после редактирования файла php.ini не забудьте перезапустить <b>apache</b> (например, командой <b>service httpd restart</b>)!
        
        <BR><BR>
        
        
<?Php

    if (!$canNotInstall)echo '<a href="/?step=2">Перейти к шагу №2</a><BR><BR>';
    else echo 'Продолжение установки невозможно без наличия обязательных модулей/параметров!<BR><BR>';

}






if ($_REQUEST['step'] == 2){
    
?>
        
        <h2>Скрипт установки фреймворка minima</h2>
        <h4>Шаг №2 - проверка файла конфигурации</h4>
        <BR>
        
<?Php
    
        if (!file_exists('include'.DIRECTORY_SEPARATOR.'config.inc')){
            echo 'Файл <b>include/config.inc</b> <font color="red">не найден</font>!<BR>
                  Пожалуйста, создайте его копированием и правкой файла <b>include/config.inc.demo</b>';
            $canNotInstall = true;
        }
        else {
            
            require('include'.DIRECTORY_SEPARATOR.'config.inc');
            
            echo 'Файл <b>include/config.inc</b> <font color="green">найден</font>.<BR><BR>';
            
            if (!file_exists('modules')){
                echo 'Папка <b>modules</b> <font color="red">не найдена</font>. Пожалуйста, создайте её!<BR><BR>';
                $canNotInstall = true;
            }
            elseif (!file_exists('modules'.DIRECTORY_SEPARATOR.'temp')){
                echo 'Папка <b>modules/temp</b> <font color="red">не найдена</font>. Пожалуйста, создайте её!<BR><BR>';
                $canNotInstall = true;
            }
            elseif (!is_writable('modules'.DIRECTORY_SEPARATOR.'temp')){
                echo 'Папка <b>modules/temp</b> <font color="red">не доступна для записи</font>. Пожалуйста, установите для неё соответствующие права!<BR><BR>';
                $canNotInstall = true;
            }
            else {
                
?>
                
                Проверка конфигурации базы данных:
                
                <BR><BR>
                
                <table border=1>
                    <tr>
                        <td>Тип БД:</td><td><b><?Php echo $cnf['dbtype'];?></b></td>
                    </tr>
                    <tr>
                        <td>Название хоста:</td><td><b><?Php echo $cnf['dbhost'];?></b></td>
                    </tr>
                    <tr>
                        <td>Название БД:</td><td><b><?Php echo $cnf['dbname'];?></b></td>
                    </tr>
                    <tr>
                        <td>Имя пользователя:</td><td><b><?Php echo $cnf['dbuser'];?></b></td>
                    </tr>
                </table>
                
                <BR><BR>
                
<?Php
    
                if (function_exists('mysql_connect') AND $cnf['dbtype']=='mysql'){
                    $cn = mysql_connect($cnf['dbhost'], $cnf['dbuser'], $cnf['dbpass']);
                    
                    if (!$cn){
                        echo 'Подключение к mysql: <font color="red">ошибка</font>! Проверьте состояние сервера, имя и пароль!<BR><BR>';
                        $canNotInstall = true;
                    }
                    else {
                        echo 'Подключение к mysql: <font color="green">ok</font><BR><BR>';
                        
                        $db = mysql_select_db($cnf['dbname']);
                        if ($db){
                            echo 'База данных <b>'.$cnf['dbname'].'</b> уже существует.<BR>';
                        }
                        else {
                            $ndb = mysql_query('CREATE DATABASE `'.$cnf['dbname'].'`');
                            $db = mysql_select_db($cnf['dbname']);
                        }
                        
                        if (!$db){
                            echo 'Проверка базы данных <b>'.$cnf['dbname'].'</b>: <font color="green">ошибка</font>!<BR>
                                    Возможно, для вашего аккаунта запрещено создание новых баз данных.
                                    Попробуйте создать её вручную.<BR><BR>';
                            $canNotInstall = true;
                        }
                        else {
                            echo 'Проверка базы данных <b>'.$cnf['dbname'].'</b>: <font color="green">ok</font><BR><BR>';
                            
                            $tab = mysql_query('SELECT * FROM '.$cnf['defs']['DB_MODEL_PAGES']);
                            if ($tab){
                                echo 'В базе данных <b>'.$cnf['dbname'].'</b> найдены служебные таблицы фреймворка.
                                      <font color="red">Они будут удалены</font> на следующем этапе!<BR>
                                      При необходимости - сделайте резервную копию до перехода к шагу №3.';
                            }
                            
                        }
                    }
                }
            }
            // дописать сюда же блок для проверки pg_connect
            
            
        }
        
    if (!$canNotInstall)echo '<BR><BR><a href="/?step=3">Перейти к шагу №3</a><BR><BR>';
    else echo '<BR><BR>Продолжение установки невозможно без доступа к базе данных!<BR><BR>';
    
}




if ($_REQUEST['step'] == 3){
    
?>
        
        <h2>Скрипт установки фреймворка minima</h2>
        <h4>Шаг №3 - наполнение базы данных</h4>
        <BR>
        
<?Php
            require('include'.DIRECTORY_SEPARATOR.'config.inc');
            if ($cnf['dbtype']=='mysql'){
                $pdo = new PDO($cnf['dbtype'] . ':host=' . $cnf['dbhost'] . ';dbname=' . $cnf['dbname'], $cnf['dbuser'], $cnf['dbpass']);
                $pdo -> query('SET NAMES utf8');
                
                if (!file_exists('clear.sql')){
                    echo 'Файл <b>clear.sql</b> <font color="red">не найден</font>. Пожалуйста, поместите его в корневую папку!<BR><BR>';
                    $canNotInstall = true;
                }
                else {
                    echo 'Файл <b>clear.sql</b> <font color="green">найден</font>.<BR><BR>';
                    $sql = file_get_contents('clear.sql');
                    
                    if (floatval(phpversion()) >= 5.3)$pdo -> query($sql);
                    else { $e = explode(';',$sql); foreach ($e as $q)$pdo -> exec($q); }
                    
                    $fp = fopen('modules'.DIRECTORY_SEPARATOR.'temp'.DIRECTORY_SEPARATOR.'install.ed','w');
                    fwrite($fp, 'ok');
                    fclose($fp);
                    
                }
                
                
                
            }
            
    if (!$canNotInstall)echo '<BR><BR>Фреймворк успешно установлен. Перед продолжением рекомендуется удалить файлы <b>install.php</b> и <b>clear.sql</b>.<BR>
                                <a href="/">Начать работу</a>.<BR><BR>';
    else echo '<BR><BR>Продолжение установки невозможно!<BR><BR>';
}




?>